home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-07-13 | 1.6 KB | 80 lines | [TEXT/CWIE] |
- //Copyright (c) 1997 Aidan Cully
- //All rights reserved
-
- #include <Menus.h>
- #include "CLKeyboardHandler.h"
- #include "CLActionHandler.h"
-
- TKeyboardHandler *TKeyboardHandler::shKeyboard;
-
- TKeyboardHandler::TKeyboardHandler()
- {
- shKeyboard= this;
- }
-
- TKeyboardHandler *TKeyboardHandler::GetKeyboard()
- {
- return( shKeyboard );
- }
-
- void TKeyboardHandler::NewDispatcher()
- {
- mhListeners.MoveLast();
- mhListeners.AddNext( 0 );
- }
-
- void TKeyboardHandler::OldDispatcher()
- {
- mhListeners.MoveLast();
- mhListeners.Remove();
- }
-
- void TKeyboardHandler::SetListener( MKeyboardListener *listener )
- {
- mhListeners.MoveLast();
- mhListeners.SetData( listener );
- }
-
- MKeyboardListener *TKeyboardHandler::GetListener()
- {
- if( !mhListeners.MoveLast() )
- return( 0 );
- MKeyboardListener *listener;
- mhListeners.GetData( listener );
- return( listener );
- }
-
- void TKeyboardHandler::DispatchEvent( const EventRecord &ev )
- {
- if( ev.modifiers&cmdKey ) {
- if( MActionHandler::sCurHandler )
- MActionHandler::sCurHandler->HandleAction( ::MenuKey( ev.message&charCodeMask ) );
- } else {
- BuildEvent( ev );
- }
- }
-
- void TKeyboardHandler::BuildEvent( const EventRecord &ev )
- {
- if( !mhListeners.MoveLast() )
- return;
- TKeyEvent kev;
- kev.when= ev.when;
- kev.scanCode= (ev.message&keyCodeMask)>>8;
- kev.asciiCode= ev.message&charCodeMask;
- kev.keyWhat= (ev.what==keyDown);
- MKeyboardListener *listener;
- mhListeners.GetData( listener );
- if( listener )
- listener->RespondKeyboard( &kev );
- }
-
- Boolean TKeyboardHandler::IsKeyDown( UINT8 key )
- {
- KeyMap keys;
- ::GetKeys( keys );
- for( int i= 0; i<4; i++ )
- if( keys[key/8]&(1<<(key%8)) )
- return( true );
- return( false );
- }